#include <bits/stdc++.h>
using namespace std;
using uint = unsigned int;
using ll = long long;
using ull = unsigned long long;
using i128 = __int128;

const int MAXN = 1e5 + 10;
ll n;
ll a[MAXN], b[MAXN];

void solve() {
    ll positive_diff_sum = 0; 
    cin >> n;

    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        b[i] = a[i] - a[i - 1];
        if (i != 1 && b[i] > 0) {
            positive_diff_sum += b[i];
        }
    }

    // 计算初始结果：(首项 + 正差分和)的平均值向上取整
    cout << (ll)ceil((positive_diff_sum + a[1]) * 0.5) << '\n';

    ll q;
    cin >> q;

    while (q--) {
        ll l, r, x;
        cin >> l >> r >> x;

        r++;  // 差分数组更新需要右移一位

        // 记录修改前的差分
        ll old_left = b[l];
        ll old_right = b[r];

        // 更新差分数组
        b[l] += x;
        b[r] -= x;

        // 更新正差分和（处理左端点）
        if (l != 1) {
            // 两个参数都是long long，类型匹配
            positive_diff_sum -= max(0LL, old_left) - max(0LL, b[l]);
        }

        // 更新正差分和（处理右端点）
        if (r != n + 1 && r != 1) {
            positive_diff_sum -= max(0LL, old_right) - max(0LL, b[r]);
        }

        cout << (ll)ceil((positive_diff_sum + b[1]) * 0.5) << '\n';
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    solve();
    return 0;
}